package com.wjm.core;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

/**
 * Data:2022年08月03日
 * Author:wjm
 * Content:
 *
 *   负责与指定客户端HTTP交互
 *      该线程来与客户端交互的过程必须遵守HTTP协议要求，采取一问一答的方式进行，固定的解析步骤：
 *       1）解析请求【问】
 *       2）处理请求
 *       3）响应请求【答】
 *
 */
public class RequestHandle implements Runnable{
    //声明一个Socket变量
    private Socket socket;

    /**
     * 用来接收从WebServer传过来的socket，socket封装着每一个客户端发送过来的所有信息
     * @param socket 从WebServer传过来的socket
     */
    public RequestHandle(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run() {
        //获取输入流
        try(InputStream in = socket.getInputStream();) {
            //解析socket请求信息
            int a;
            //声明一个空字符串用,来装读到的字符
            StringBuilder stringBuilder = new StringBuilder();
            //申明两个变量用来表示当前读到的字符，和上一次读到的字符
            char cur = ' ';//当前的字符
            char pre = ' ';//上一个字符
            while ((a=in.read()) != -1){
                cur = (char)a;
                //判断是否读到一行的末尾,因为请求的每一行是以换行符和回车符为结尾的
                if (cur == 10 && pre == 13){
                    break;
                }
                //将当前的字符装到空字符串中
                stringBuilder.append(cur);
                //将当前字符赋值给上一个字符
                pre = cur;
            }
            //输出stringBuilder
            System.out.println("读到的第一行为："+stringBuilder);


        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
